Array(3) // [, , ,]  Array(3)返回一个具有 3 个空位的数组。

//注意，空位不是undefined，一个位置的值等于undefined，依然是有值的。空位是没有任何值，in运算符可以说明这一点。

0 in [undefined, undefined, undefined] // true
0 in [, , , ] // false

/*
ES5 对空位的处理，已经很不一致了，大多数情况下会忽略空位。

    forEach(), filter(), reduce(), every() 和some()都会跳过空位。
    map()会跳过空位，但会保留这个值
    join()和toString()会将空位视为undefined，而undefined和null会被处理成空字符串。
	
	
	ES6 则是明确将空位转为undefined。
	
	Array.from方法会将数组的空位，转为undefined，也就是说，这个方法不会忽略空位。
	扩展运算符（...）也会将空位转为undefined。
	copyWithin()会连空位一起拷贝。
	fill()会将空位视为正常的数组位置。
	for...of循环也会遍历空位。
	entries()、keys()、values()、find()和findIndex()会将空位处理成undefined。
	由于空位的处理规则非常不统一，所以建议避免出现空位!!!

*/

/**
 * 什么是in运算符?
 * 1、如果第二个运算数为对象，则in运算符用来检测第一个运算数是否是第二个运算数的属性名。是，返回true，否则返回false。

　　例：

　　var obj = {x:1,y:2};

　　“x” in obj     // 返回true

　　“y” in obj     // 返回true

　　“1” in obj     // 返回false

 

　　2、如果第二个运算数为数组，则in运算符用来检测第一个运算数是否为数组包含的索引之一。

　　例：

　　var arr = [12,45,78];

　　12 in arr       // 返回false

　　45 in arr       // 返回false

　　78 in arr       // 返回false

　　0 in arr         // 返回true

　　2 in arr         // 返回true
 */
